#define _CRT_SECURE_NO_WARNINGS 1

#include<stdio.h>

#include<assert.h>


//模拟实现库函数strlen

//方法一：计数器法 
//不更改数组内容，所以用const修饰，保护数组
int my_strlen_1(const char* pa)
{
	//断言，防止传入空指针
	assert(pa);//若pa为空指针，则会报错
	int count = 0;
	while (*pa!='\0')
	{
		count++;
		pa++;
	}
	return count;
}
//方法二：递归法
int my_strlen_2(const char* pa)
{
	assert(pa);
	if (*pa == '\0')
		return 0;
	else
		return 1 + my_strlen_2(pa + 1);
}

//方法三：指针法
int my_strlen_3(const char* pa)
{
	assert(pa);
	char* star = pa;
	while (*pa != '\0')
	{
		pa++;
	}
	return pa - star;//指针相减得到二者之间的步长，也就是元素的个数
}
int main()
{
	char arr[] = "abcdefg";
	int len_1=my_strlen_1(arr);
	printf("%d\n", len_1);
	int len_2 = my_strlen_2(arr);
	printf("%d\n", len_2);
	int len_3 = my_strlen_3(arr);
	printf("%d\n", len_3);
	
	return 0;
}